package com.study.demo.runner;

import org.springframework.boot.CommandLineRunner;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;

import java.util.Arrays;

/**
 * CommandLineRunner 和 ApplicationRunner这俩个类的执行时机都是一样的，都是在SpringBoot启动的倒数第二步开始执行。
 * 倒数第二步基本上等于SpringBoot已经启动完毕了。可以去看SpringApplication.run(Application.class, args);run方法的源码。
 *
 * CommandLineRunner 和 ApplicationRunner这俩个类谁先执行？
 * 同等优先级的情况下ApplicationRunner类先执行。
 * 不同等优先级的情况下：看@Order(1)的值，@Order(1)的值越小，越先执行。
 */
@Order(1)
@Component
public class CommandLineRunnerDemo implements CommandLineRunner {

    /**
     * java -jar .\spring-boot-runner-demo-1.0-SNAPSHOT.jar --test=show p1 p2 p3
     * @param args incoming main method arguments
     * @throws Exception 业务异常
     */
    @Override
    public void run(String... args) throws Exception {

        System.out.println("CommandLineRunner的作用就是，SpringBoot启动成功之后，我就立马做点事情,主要功能就是项目启动成功之后，ApplicationRunner默认比CommandLineRunner优先执行");

        System.out.println("CommandLineRunner拿到的是最原始的参数，你传的是什么参数，这里拿到的就是什么参数:" + Arrays.toString(args));

        System.out.println("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++");
        System.out.println();
    }
}
